package com.shortLinked.project.config;

import org.redisson.api.RBloomFilter;
import org.redisson.api.RedissonClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import static com.shortLinked.project.common.constant.ColoredOutput.RED;
import static com.shortLinked.project.common.constant.ColoredOutput.RESET;

/**
 * 布隆过滤器配置
 */
@Configuration
public class RBloomFilterConfiguration {

    /**
     * 防止短链接查询数据库的布隆过滤器
     */
    @Bean
    public RBloomFilter<String> shortUriCreateCachePenetrationBloomFilter(RedissonClient redissonClient) {
        System.out.println(RED+"这里是布隆过滤器shortUriCreateCachePenetrationBloomFilter"+RESET);
        RBloomFilter<String> cachePenetrationBloomFilter = redissonClient.getBloomFilter("shortUriCreateCachePenetrationBloomFilter");
//        创建或获取一个名为 "shortUriCreateCachePenetrationBloomFilter" 的布隆过滤器实例，
//        用于后续向其中添加数据或查询数据。它的作用是防止对短链接的查询频繁穿透到数据库，从而提高性能和减少数据库负担。
        cachePenetrationBloomFilter.tryInit(100000000L, 0.001);  // 元素个数  误判率
        return cachePenetrationBloomFilter;
    }
}